package com.yq.homework.day18;

import jdk.nashorn.internal.ir.ReturnNode;

/**
 * @author 3307235355@qq.com
 * @since 2022/06/18 14:36
 * 提供以下6个功能接口，请用Lambda表达式分别创建它们的子类对象，调用test()方法进行测试。
 * 注意：自由发挥方法实现，主要练习Lambda表达式的语法。
 */
public class Demo03 {
    public static void main(String[] args) {
        //1
        INoReturnNoParam i1 = () -> System.out.println("test");
        i1.test();
        System.out.println("=========");
        new INoReturnNoParam(){

            @Override
            public void test() {
                System.out.println("test");
            }
        }.test();
        System.out.println("=========");

        //    2
        INoReturnOneParam i2 = a -> System.out.println("a="+a);
        i2.test(10);
        System.out.println("=========");

        // 3
        INoReturnTwoParam i3 = (a,b) -> System.out.println(a+b);
        i3.test(10,23);
        System.out.println("=========");

        IHasReturnNoParam i4 = () -> 1;
        System.out.println(i4.test());
        System.out.println("=========");

        IHasReturnOneParam i5 = a -> a;
        System.out.println(i5.method(10));
        System.out.println("=========");


        IHasReturnTwoParam i6 = (a,b) -> a+b;
        System.out.println(i6.test(10, 23));
        System.out.println("=========");
        IHasReturnTwoParam i7 = new Demo03()::test;
        System.out.println(i7.test(20, 30));
        System.out.println("=========");

        IHasReturnTwoParam i8 =Demo03::myTest;
        System.out.println(i8.test(18, 20));


    }
    public static  int myTest(int a,int b){
        System.out.println("两个数的的和："+(a+b));
        return 666;
    }
    public  int test(int a,int b){
        System.out.println("两个数的的和："+(a+b));
        return 666;
    }
}


//无返回值无参数的功能接口
@FunctionalInterface
interface INoReturnNoParam {
    void test();
}

//无返回值有一个参数的功能接口
@FunctionalInterface
interface INoReturnOneParam {
    void test(int a);
}

//无返回值两个参数的功能接口
@FunctionalInterface
interface INoReturnTwoParam {
    void test(int a, int b);
}

//有返回值无参数的功能接口
@FunctionalInterface
interface IHasReturnNoParam {
    int test();
}

//有返回值一个参数的功能接口
@FunctionalInterface
interface IHasReturnOneParam {
    int method(int a);
}

//有返回值两个参数的功能接口
@FunctionalInterface
interface IHasReturnTwoParam {
    int test(int a, int b);
}
